from flask import render_template, jsonify, request, session
from models import db
from models.index import News
from . import index_blu

@index_blu.route("/")
def index():
    # 查询点击量最多的前6个新闻信息
    # clicks_top_6_news = db.session.query(News).order_by(-News.clicks).limit(6)
    clicks_top_6_news = db.session.query(News).filter(News.clicks).limit(6)
    # 查询用户是否已经登录
    user_id = session.get('user_id', 0)
    nick_name = session.get('nick_name', '')

    return render_template('index.html', clicks_top_6_news=clicks_top_6_news, nick_name=nick_name)

@index_blu.route('/newslist')
def category_news():
    # 获取前端传递过来的数据， 就是提取url中的数据
    # http://127.0.0.1:8899newslist?page=1&cid=1&per_page=10
    # 要从上述url中提取page,cid,per_page的值
    page = request.args.get('page', 1) # 前端要的是哪一页的数据
    cid = int(request.args.get('cid', 0)) # 前端要的是哪个分类的数据
    per_page = request.args.get('per_page', 1) # 前端要的每个页面的新闻个数

    # 到数据库中查询数据
    # 如果cid是0，表示要看最新的，如果不是0,则按类型按原来的规则查询
    if cid == 0:
        paginate = db.session.query(News).order_by(-News.clicks).paginate(page=int(page),per_page=int(per_page),error_out=False)
    else:
        cid += 1 # 由于测试数据分类中从0开始，而数据库是从1开始的，所以用户点击的1实际是2
        paginate = db.session.query(News).filter(News.category_id == cid).paginate(page=int(page),per_page=int(per_page),error_out=False)
    # 准备要返回给浏览器的数据
    ret = {
         "totalPage": paginate.pages, # 总页数
         "newsList": [news.to_dict() for news in paginate.items]
    }
    return jsonify(ret)

@index_blu.route('/detail/<int:news_id>')
def detail(news_id):
    # 根据news_id查询这个新闻的详情
    news = db.session.query(News).filter(News.id == news_id).first()

    # 查询这个新闻的作者
    news_author =news.user
    news_author.news_num = news_author.news.count()
    news_author.follower_num = news_author.followers.count()

    # 查询用户是否已经登录
    user_id = session.get('user_id', 0)
    nick_name = session.get('nick_name', '')

    # 计算当前登录用户是否已经关注了这个新闻的作者
    news_author_follower_id = [x.id for x in  news_author.followers]
    if  user_id in news_author_follower_id:
        news_author.can_follow = False
    else:
        news_author.can_follow = True

    # 计算当前登录用户是否收藏了这篇文章
    news_collected_user_id = [x.id for x in news.collected_user]
    if user_id in news_collected_user_id:
        news.can_collect = False
    else:
        news.can_collect = True

    return render_template('detail.html', news = news, nick_name=nick_name, news_author=news_author)